package com.xuelang.pipeline.artifact.client.common.validator;

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

/**
 * 枚举类型的校验器，实现 ConstraintValidator 接口。
 *
 * @author xiwen.zxg
 * @since 2024/6/27
 */
public class EnumValidator implements ConstraintValidator<ValidEnum, Object> {

    /**
     * 要验证的枚举类。
     */
    private Class enumClass;

    /**
     * 初始化方法，从注解中读取枚举类信息。
     * @param constraintAnnotation 注解实例
     */
    @Override
    public void initialize(ValidEnum constraintAnnotation) {
        this.enumClass = constraintAnnotation.enumClass();
    }

    /**
     * 验证逻辑方法，检查给定的值是否属于指定的枚举类型。
     * @param value 要验证的值
     * @param context 验证上下文
     * @return 如果值有效则返回 true，否则返回 false
     */
    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        if (value == null) {
            return false;
        }
        try {
            Enum<?> enumValue = Enum.valueOf(enumClass, value.toString());
            return true;
        } catch (IllegalArgumentException e) {
            return false;
        }
    }
}

